﻿using System;
using System.Windows.Forms;
using ERP_SaaS_WinForm.登录.Common;

namespace ERP_SaaS_WinForm.生产计划_派单_车间.apiResquest
{
    /// <summary>
    /// JWT授权帮助类
    /// 用于在生产计划+派单+车间模块中处理JWT授权
    /// </summary>
    public static class JwtAuthHelper
    {
        /// <summary>
        /// 检查用户是否已登录
        /// </summary>
        /// <returns>是否已登录</returns>
        public static bool CheckLoginStatus()
        {
            if (!TokenDto.IsLoggedIn)
            {
                MessageBox.Show("用户未登录，请先登录系统", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            return true;
        }

        /// <summary>
        /// 检查登录状态，如果未登录则显示登录窗体
        /// </summary>
        /// <returns>是否已登录</returns>
        public static bool EnsureLoggedIn()
        {
            if (!TokenDto.IsLoggedIn)
            {
                var result = MessageBox.Show("用户未登录，是否现在登录？", "登录提示",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    // 打开登录窗体
                    var loginForm = new LoginForm();
                    loginForm.ShowDialog();

                    // 检查登录是否成功
                    return TokenDto.IsLoggedIn;
                }
                return false;
            }
            return true;
        }

        /// <summary>
        /// 获取当前登录用户信息
        /// </summary>
        /// <returns>用户信息字符串</returns>
        public static string GetCurrentUserInfo()
        {
            if (TokenDto.IsLoggedIn)
            {
                return $"当前用户: {TokenDto.Name}";
            }
            return "未登录";
        }

        /// <summary>
        /// 处理API响应中的授权错误
        /// </summary>
        /// <param name="apiResponse">API响应</param>
        /// <returns>是否处理了授权错误</returns>
        public static bool HandleAuthError(ApiResponse<object> apiResponse)
        {
            if (apiResponse?.ErrorCode == 401 ||
                (apiResponse?.Message?.Contains("登录已过期") == true) ||
                (apiResponse?.Message?.Contains("未授权") == true))
            {
                var result = MessageBox.Show("登录已过期，是否重新登录？", "登录过期",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    // 清除当前token
                    TokenDto.Clear();

                    // 打开登录窗体
                    var loginForm = new LoginForm();
                    loginForm.ShowDialog();

                    return TokenDto.IsLoggedIn;
                }
                return false;
            }
            return true;
        }

        /// <summary>
        /// 显示登录状态信息
        /// </summary>
        public static void ShowLoginStatus()
        {
            string status = GetCurrentUserInfo();
            MessageBox.Show(status, "登录状态", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        /// <summary>
        /// 登出当前用户
        /// </summary>
        public static void Logout()
        {
            if (TokenDto.IsLoggedIn)
            {
                var result = MessageBox.Show("确定要退出登录吗？", "退出登录",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    TokenDto.Clear();
                    ApiRequestHelper.ClearAuthorizationToken();
                    MessageBox.Show("已成功退出登录", "退出登录", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
    }
}